#include "Node.h"
#include "TextNode.h"
namespace xml{

/********************************************
 *              Public
 ********************************************/

    /********************************************
     *              Constructors
     ********************************************/

        Node::Node()
        {
            Depth=0;
        }

    /********************************************
     *              Methods
     ********************************************/

        void Node::AppendText(string str){
            TextNode * node =   new TextNode(str);
            node->Depth=Depth+1;
            Childs.push_back(node);
        }

        Node & Node::AppendChild(Node & node){
            node.Depth=Depth+1;
            Childs.push_back(&node);
            return node;
        }

        string Node::GetTabValue(){
            string str;
            for(int i=0;i<Depth;i++){
                str+='\t';
            }
            return str;
        }



        /********************************************
         *              Get
         ********************************************/

            NodeType    Node::Type(){
                return m_Type;
            }

            Node * Node::FirstChild(){
                if(Childs.size()>0){
                    return Childs.front();
                }
                return NULL;
            }

            Node * Node::LastChild(){
                if(Childs.size()>0){
                    return Childs.back();
                }
                return NULL;
            }

            Node * Node::Child(int i){
                 if(Childs.size()>i){
                     return Childs.at(i);
                 }
                return NULL;
            }


        /********************************************
         *              Set
         ********************************************/



/********************************************
 *              Private
 ********************************************/

    /********************************************
     *              Methods
     ********************************************/




        void Node::Print()
        {

        }

        void Node::Save(ofstream &f)
        {

        }

        string Node::Value(){
            return "";
        }

}
